package fiuba.td.fabrica.controller;

import fiuba.td.fabrica.constants.GlobalConstants.PANTALLA_ACCIONES;
import fiuba.td.fabrica.model.entities.CintaTransportadora;
import fiuba.td.fabrica.model.entities.LineaProduccion;
import fiuba.td.fabrica.model.entities.Maquina;
import fiuba.td.fabrica.model.entities.SalidaFabrica;
import fiuba.td.fabrica.model.entities.Terreno;
import fiuba.td.fabrica.view.elements.IconoJLabel;

public class ControllerSelection {
	
	private Maquina seleccionMaquina1;
	private Maquina seleccionMaquina2;
	private CintaTransportadora seleccionCinta;
	private LineaProduccion seleccionLineaProduccion;
	private SalidaFabrica seleccionSalidaFabrica;
	private PANTALLA_ACCIONES accion; 

	private Terreno terreno;
	private IconoJLabel matrizTerreno[][];
	
	private static ControllerSelection controllerSelection = null;
	
	private ControllerSelection()
	{ }
	
	public static ControllerSelection getInstance() {
		if (controllerSelection == null) {
			controllerSelection = new ControllerSelection();
		}
		return controllerSelection;
	}

	public CintaTransportadora getSeleccionCinta() {
		return seleccionCinta;
	}

	public void setSeleccionCinta(CintaTransportadora seleccionCinta) {
		this.seleccionCinta = seleccionCinta;
	}
	
	public IconoJLabel[][] getMatrizTerreno() {
		return matrizTerreno;
	}

	public void setMatrizTerreno(IconoJLabel[][] matrizTerreno) {
		this.matrizTerreno = matrizTerreno;
	}

	public void setSeleccionMaquina(Maquina maquina) {
		
		if (this.seleccionCinta != null) {
			if (this.seleccionMaquina1 != null)
				this.seleccionMaquina2 = maquina;
			else
				this.seleccionMaquina1 = maquina;
		} else {
			this.seleccionMaquina1 = maquina;
		}
	}
	
	public Maquina getSeleccionMaquina1() {
		return seleccionMaquina1;
	}

	public Maquina getSeleccionMaquina2() {
		return seleccionMaquina2;
	}

	public SalidaFabrica getSeleccionSalidaFabrica() {
		return seleccionSalidaFabrica;
	}

	public void setSeleccionSalidaFabrica(SalidaFabrica seleccionSalidaFabrica) {
		this.seleccionSalidaFabrica = seleccionSalidaFabrica;
	}
	
	public PANTALLA_ACCIONES getAccion() {
		return accion;
	}

	public void setAccion(PANTALLA_ACCIONES accion) {
		this.accion = accion;
	}
	
	public void limpiarAccion() {
		this.accion = null;
	}

	public void limpiarSeleccion() {
		this.seleccionCinta = null;
		this.seleccionMaquina1 = null;
		this.seleccionMaquina2 = null;
		this.seleccionSalidaFabrica = null;
		this.limpiarAccion();
	}
	
	public void limpiarSeleccionLineaProduccion() {
		this.seleccionLineaProduccion = null;
	}

	public LineaProduccion getSeleccionLineaProduccion() {
		return seleccionLineaProduccion;
	}

	public void setSeleccionLineaProduccion(LineaProduccion seleccionLineaProduccion) {
		this.seleccionLineaProduccion = seleccionLineaProduccion;
	}
	
	public void setTerreno(Terreno terrenoSeleccionado){
		this.terreno = terrenoSeleccionado;
	}
	
	public Terreno getTerrenoSeleccionado(){
		return this.terreno;
	}
	
	public boolean puedeConectarCinta() {
		// Chequeo si hay una cinta seleccionada y 2 maquinas o una maquina y una salida de fabrica
		return seleccionCinta != null && 
				((seleccionMaquina1 != null && seleccionMaquina2 != null) 
						|| (seleccionMaquina1 != null && seleccionSalidaFabrica != null));
	}

}
